package main

import "fmt"

// 找出井字棋的获胜者
/*
1、新建3*3的棋盘board
2、对于每一步，如果落子是A，就把board对应位置设置为1,否则-1
3、等到所有moves结束后，看看最终的那一步所在的行列斜线（如果在斜线上的话）是否为3或者-3，就知道胜者是谁
4、如果上一步不满足，再看看步数是不是9，如果是9，说明无路可走，平局Draw；否则就是进行中Pending
 */

func tictactoe(moves [][]int) string {
	board := make([][]int, 3)
	for k := range board {
		board[k] = make([]int, 3)
	}
	for k, v := range moves {
		if k%2 == 0 {  // A走的棋
			board[v[0]][v[1]]++
		} else {  // B走的棋
			board[v[0]][v[1]]--
		}
	}
	l := len(moves)
	r := win(board, moves[l-1][0], moves[l-1][1])  // moves[l-1][0], moves[l-1][1]表示最后一颗棋子的位置
	if r != "" {
		return r
	}
	if len(moves) == 9 {
		return "Draw"
	}
	return "Pending"
}

func win(board [][]int, row, col int) (result string) {
	tRow, tCol, tL2r, tR2l := 0, 0, 0, 0
	for i := 0; i < 3; i++ {  // 求行的和
		tRow += board[row][i]
	}
	for i := 0; i < 3; i++ {  // 求列的和
		tCol += board[i][col]
	}
	if row == col {  // 左上到右下
		for i := 0; i < 3; i++ {
			tL2r += board[i][i]
		}
	}
	if row == 2-col {   // 右上到左下
		for i := 0; i < 3; i++ {
			tR2l += board[i][2-i]
		}
	}
	if tRow == 3 || tCol == 3 || tL2r == 3 || tR2l == 3 {
		return "A"
	}
	if tRow == -3 || tCol == -3 || tL2r == -3 || tR2l == -3 {
		return "B"
	}
	return ""
}

func main() {
	board := make([][]int, 3)
	for k := range board {
		board[k] = make([]int, 3)  // 二维切片初始化
	}
	fmt.Printf("%v  %d\n",board, cap(board))
}
